Golang语言使用体验与评价探讨

Golang语言使用体验与评价探讨 你会给以下人群什么建议:

  1. 任何刚开始学习(我的意思是正在学习)Go语言的人。
  2. 任何想用Go语言从事后端开发的人。
  3. 寻求以Go语言为职业,或者特别是想用它来谋生的人。

谢谢。

9 回复

非常感谢。

更多关于Golang语言使用体验与评价探讨的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


感谢回复。关于第二个选项,我认为任何为了Web开发而学习Go语言的人,肯定都是在做后端开发。Go语言是否曾用于前端开发呢?

我记得读到过一些关于Go语言对GUI或类似方面支持有限的内容?是否有用于前端的框架或库呢?谢谢。

如果你了解其他编程语言,可以轻松学会Go。关键是要专注学习并付诸实践。 2- 据我所知,Go主要用于后端开发。 3- Go与其他语言类似,但我建议也学习更多语言。这将使你在市场上成为一名多才多艺且具有竞争力的开发者。

感谢您的有益回复。是的,我完全致力于使用 Golang 进行后端开发。目前正在做我的第一个项目,一个论坛 Web 应用的后端。

工作确实非常重要,是的,那是最终目标(为了进一步发展)。

如果不过分的话,我希望在这条路上能得到一些指导,我知道导师在职业道路上是多么重要。如果您愿意指导我,我将不胜感激。谢谢。

Oluwatobi_Giwa:

如果这个请求不算过分的话,我希望在这条路上能得到一些指导。我知道在职业道路上,一位老师是多么重要。如果您愿意接纳我,我将非常感激。谢谢。

那么,你具体希望得到什么样的指导呢?你可以在论坛发帖时随时@我,我会尽力回复。我认为最重要的一点是:持续前进并不断编写代码。你写下的每一行代码,你阅读的他人代码的每一行,你提交或审查的每一个拉取请求,都会让你成为一名更优秀的开发者。

你会给以下人群什么建议?

  1. 任何刚刚接触(我指的是正在学习)Go语言的人。

在我看来,Go语言从其他语言继承了很多东西。如果你有其他开发背景,学习起来会相当容易。但映射、切片和接口的语法仍然是我关注的重点。所以,这可能是我给新开发者的首要学习建议。

  1. 任何想用Go语言进行后端开发的人。

看看使用Go的全栈方案。

  1. 寻求以Go语言谋生或特别是维持生计的人。

就像对待任何语言一样。专注于你能为客户或客户的客户做什么。忘掉工具本身。

Oluwatobi_Giwa:

Golang 是否曾用于前端开发?

根据我的专业经验,没有。虽然存在一些前端工具包,但我尚未参与过使用 Go 进行前端开发的项目,因为市面上已有许多成熟且强大的选择,例如 Web 框架(PreactAngularVue 等)、FlutterReact Native 等。话虽如此,我确实在个人项目中用 Go 构建过用户界面。但如果你是为了找工作,不要专注于用 Go 来构建 UI。应该专注于构建 RESTful API。

关于第二个选项,我认为任何为了Web开发而学习Go语言的人,肯定是在做后端。Go语言到底有没有被用于前端呢?

我记得读过一些关于Go语言对GUI或类似东西支持很少的内容?是否有用于前端的框架或库。谢谢。

对我来说,前端涵盖了从React到Go模板的一切。我正在使用Go的HTML模板,我认为这属于“前端”。

基本上,Angular(WordPress / Drupal等)中的所有GUI都是包含Javascript、CSS和HTML等的库。所有这些“东西”你都可以在没有框架的情况下完成,但这并不神奇,因此也更困难。

将Angular和Go作为框架进行比较,我发现它们相当相似。但在我测试时,Go的速度快了一倍。我测试过的所有框架都包含大量永远用不到的东西,这导致了应用程序变得更大更慢。

我认为Go是一种具备前端能力的后端语言。

对于正在学习Go语言的人,建议从官方文档和《The Go Programming Language》开始,重点理解并发模型(goroutine/channel)、接口和错误处理。例如,学习使用goroutine时:

package main

import (
    "fmt"
    "time"
)

func worker(id int, jobs <-chan int, results chan<- int) {
    for j := range jobs {
        fmt.Printf("worker %d processing job %d\n", id, j)
        time.Sleep(time.Second)
        results <- j * 2
    }
}

func main() {
    jobs := make(chan int, 100)
    results := make(chan int, 100)
    
    for w := 1; w <= 3; w++ {
        go worker(w, jobs, results)
    }
    
    for j := 1; j <= 5; j++ {
        jobs <- j
    }
    close(jobs)
    
    for r := 1; r <= 5; r++ {
        <-results
    }
}

对于后端开发者,建议掌握标准库的net/http、database/sql和encoding/json。构建REST API时:

package main

import (
    "encoding/json"
    "log"
    "net/http"
)

type User struct {
    ID   int    `json:"id"`
    Name string `json:"name"`
}

func usersHandler(w http.ResponseWriter, r *http.Request) {
    users := []User{
        {ID: 1, Name: "Alice"},
        {ID: 2, Name: "Bob"},
    }
    
    w.Header().Set("Content-Type", "application/json")
    json.NewEncoder(w).Encode(users)
}

func main() {
    http.HandleFunc("/users", usersHandler)
    log.Fatal(http.ListenAndServe(":8080", nil))
}

对于职业开发者,建议深入理解性能优化和系统设计。例如使用pprof进行性能分析:

package main

import (
    "log"
    "net/http"
    _ "net/http/pprof"
    "time"
)

func heavyTask() {
    for i := 0; i < 1000000; i++ {
        _ = make([]byte, 1024)
        time.Sleep(time.Microsecond)
    }
}

func main() {
    go func() {
        for {
            heavyTask()
        }
    }()
    
    log.Fatal(http.ListenAndServe("localhost:6060", nil))
}

运行后访问http://localhost:6060/debug/pprof/可查看性能数据。同时建议研究Go运行时源码,参与开源项目如Docker、Kubernetes,这些项目展示了Go在生产环境中的最佳实践。

回到顶部