有哪些适合学习Golang的网站?
有哪些适合学习Golang的网站? 我是一名C/C++开发者。从今天开始学习Go语言。 Go语言与C/C++类似且简单,所以我想我很快就能上手。 学习了大约一小时后,我发现语法和我想象中有差异,但我不知道如何解决,所以进展缓慢。 因此,我想找到一种语法能完全匹配C++。 有没有什么有用的网站?我遇到了这样的情况,即使是下面这些非常简单的数组、变量、初始化和循环语句都很困难,而且它们的行为与预期的情况不同。
像这样… C++
std::vector<std::string> test; // 空容器 ok
std::vector<std::string> test(2,"test"); // ok
std::vector<std::string> test = {"123","123123"} // ok
==> 可通过构造函数赋值,也可通过等号进行拷贝赋值,所以是可行的
Go语言
var test []string //ok
var test []string = {"123","345","456"} // 不工作
test := []string{"123","345","456"} // ok
==> 我不知道为什么它不工作或工作更多关于有哪些适合学习Golang的网站?的实战教程也可以访问 https://www.itying.com/category-94-b0.html
不,你需要写英文。
- 切片 我漏掉了那个
什么样的示例代码能让我的Go语言技能更快地提升?
这是中文。你需要一个翻译。
或者你也可以简单地写成:
var s = []string{"a", "b", "c"}
var 关键字能够理解等号 = 后面的类型。
最近,Digital Ocean 向我们展示了一份精彩的内容。尽情享受吧!
我始终推荐获取一本《Go 程序设计语言》的副本。
对于任何编程语言,建议都是从解决小项目开始,并尝试成为 Go 社区的一部分。
在 Go 语言中,var 关键字仅声明一个类型的标识符。你不能在那个时候赋值。
那么按照你的说法,var foo int = 1 是无效的?
realbrotha:
var test string = {“123”,“345”,“456”}
勘误:* 切片
由于切片是复合类型,你只需要正确地构造它们。
我无法测试,因为这是用手机写的,但下面的代码应该能工作,尽管我实际上不会这么做,因为那种重复让我很烦。
var s []string = []string{"a", "b", "c"}
Go语言中的 var 关键字仅声明一个具有类型的标识符,此时不能为其赋值。 而短声明操作符 := 则同时声明一个标识符并为其赋值。
除了语言规范,也请参阅 Effective Go。
参考并学习: GoByExample
学习的方法有很多,以上都是不错的途径。
我通过这门课程快速入门了 Go:

Web Development w/ Google’s Go (golang) Programming Language
学习由一位拥有超过 15 年教学经验的计算机科学大学教授讲授的 Web 编程。
首先:var 是一个关键字,用于声明变量。
然后看你给出的这个例子:
var test []string = {“123”,“345”,“456”}
上面这个是语法错误的,为什么呢?
原因是你应该这样写:
var test []string =[]string {“123”,“345”,“456”}
因为你做了一个赋值的操作。
再看下面的例子:
test := []string{“123”,“345”,“456”}
这个是声明了局部变量,然后通过自动推导的方式实现的。
我发现的最好的课程是Jon Calhoun的课程。他提供关于算法和一些"gophercises"的免费课程。他还有一个付费的Web开发课程,这是我在这个主题上找到的最好的资源。
Jon Calhoun的优势在于,与Udemy上的许多课程不同,他实际上解释了如何将各个部分组合在一起,而不仅仅是大声朗读包的文档。
他在疫情期间提供了一个很大的折扣。Web开发课程最经济的选项是只购买他的书(不含视频录像),大约40美元。包含视频录像的完整课程大约150美元,非常物有所值。
作为C++开发者,你遇到的困惑很常见。Go的语法设计确实与C++有显著差异,特别是初始化方面。让我直接解释你遇到的问题并提供解决方案。
核心差异解析
Go语言没有构造函数,初始化语法更严格。你遇到的数组/切片初始化问题源于Go的类型系统设计:
// C++风格(Go中无效)
var test []string = {"123","345","456"} // 编译错误
// Go正确写法
var test []string = []string{"123","345","456"} // 完整类型声明
test := []string{"123","345","456"} // 类型推断简写
推荐学习资源
官方文档(首选)
- Go官方文档:https://go.dev/doc/
- Go Tour:https://go.dev/tour/ (交互式学习)
- Effective Go:https://go.dev/doc/effective_go (最佳实践)
针对C/C++开发者的资源
- Go for C++ Programmers:https://go.dev/doc/forcppprogrammers
- cgo文档:https://pkg.go.dev/cmd/cgo (C与Go互操作)
具体语法对比示例
// 1. 数组初始化对比
// C++: int arr[3] = {1, 2, 3};
// Go:
var arr1 [3]int = [3]int{1, 2, 3}
arr2 := [3]int{1, 2, 3}
// 2. 切片(动态数组)初始化
// C++: std::vector<int> vec = {1, 2, 3};
// Go:
var slice1 []int = []int{1, 2, 3}
slice2 := []int{1, 2, 3}
// 3. 映射(map)初始化
// C++: std::map<std::string, int> m = {{"a", 1}, {"b", 2}};
// Go:
var m1 map[string]int = map[string]int{"a": 1, "b": 2}
m2 := map[string]int{"a": 1, "b": 2}
// 4. 结构体初始化
type Point struct {
X, Y int
}
// C++: Point p = {1, 2};
// Go:
var p1 Point = Point{X: 1, Y: 2}
p2 := Point{X: 1, Y: 2}
p3 := Point{1, 2} // 顺序初始化
关键概念差异
// Go没有构造函数,使用工厂函数模式
type MyStruct struct {
data []string
}
// 类似构造函数的工厂函数
func NewMyStruct(items []string) *MyStruct {
return &MyStruct{data: items}
}
// 使用
obj := NewMyStruct([]string{"a", "b", "c"})
// Go的赋值是值拷贝(对于slice/map是指针拷贝)
slice1 := []int{1, 2, 3}
slice2 := slice1 // 共享底层数组
slice2[0] = 99 // slice1[0]也变为99
// 深拷贝需要显式操作
slice3 := make([]int, len(slice1))
copy(slice3, slice1)
实用学习建议
直接从官方文档开始,特别是"Go for C++ Programmers"这篇文档。它详细解释了两种语言的核心差异,能帮你快速建立正确的思维模型。Go Tour的交互式练习能让你立即验证语法理解。
记住Go的设计哲学是"显式优于隐式",这解释了为什么类型声明需要更完整。一旦适应这种显式风格,你会发现代码的可读性和维护性显著提升。


