这是我参与「第三届青训营 -后端场」笔记创作活动的的第2篇笔记
上次课程我们了解了GO的基本用法,熟悉了基本的语法规则,这节课聚焦于高质量编程与性能调优,旨在写出优雅的代码。
首先是第一部分,高质量编程。编写的代码正确可靠,简洁清晰的目标就是高质量代码。 因此,为达到以上目的,我们要遵守一些原则: 简单性、可读性、生产力。 针对GO,我们应注意以下几点:代码格式,注释,命名规范,控制流程,错误和异常处理。 常见的GOfmt格式是我们都应该遵守的格式。 良好的注释可以增加程序的可读性,适合注释公共符号。 命名规范要记住简洁胜于冗长。尽量使用易懂的缩略词。 控制流程要保证逻辑清晰。
第二部分是性能调优。 首先介绍了GO语言提供基准性能测试的benchmark工具。 针对slice,map等变量,尽可能在使用make()初始化切片时提供容量信息。其本质是一个数组,只是用一个结构体封装了。同时还避免另一个陷阱:大内存未释放。 使用atomic包实现调优。 一下用一段我自己写的程序来总结一下上面几点吧。
package main
import "sort"
func threeSum(nums []int) [][]int { nums = quick_Sort(nums, 0, len(nums)-1) res := [][]int{} for l := 0; l < len(nums); l++ { if l != 0 && nums[l] == nums[l-1] { continue }
r := len(nums) - 1
//只要保证l和mid不重复,r就不会重复
for mid := l + 1; mid < len(nums); mid++ {
if mid != l+1 && nums[mid] == nums[mid-1] {
continue
}
for mid < r && nums[l]+nums[mid]+nums[r] > 0 {
r--
}
if mid == r {
break
}
if nums[l]+nums[mid]+nums[r] == 0 {
res = append(res, []int{nums[l], nums[mid], nums[r]})
}
}
}
return res
}
func quick_Sort(nums []int, left, right int) []int { if left > right { return nums } i, j, pivot := left, right, nums[left] for i < j { for i < j && nums[j] >= pivot { j-- } for i < j && nums[i] <= pivot { i++ } nums[i], nums[j] = nums[j], nums[i] } nums[i], nums[left] = nums[left], nums[i]
quick_Sort(nums, left, i-1)
quick_Sort(nums, i+1, right)
return nums
}
//四数之和 func fourSum(nums []int, target int) [][]int { sort.Ints(nums) res := [][]int{} for l := 0; l < len(nums); l++ { if l > 0 && nums[l] == nums[l-1] { continue }
for ll := l + 1; ll < len(nums); ll++ {
if ll > l+1 && nums[ll] == nums[ll-1] {
continue
}
r := len(nums) - 1
for mid := ll + 1; mid < len(nums); mid++ {
if mid > ll+1 && nums[mid] == nums[mid-1] {
continue
}
for mid < r && nums[l]+nums[ll]+nums[mid]+nums[r] > target {
r--
}
if mid == r {
break
}
if nums[l]+nums[ll]+nums[mid]+nums[r] == target {
res = append(res, []int{nums[l], nums[ll], nums[mid], nums[r]})
}
}
}
}
return res
} **
标题:📖 青训营第三期 | 笔记创作活动-青训营社区