@@ -199,6 +199,9 @@ func (gb *GoBrew) judgeVersion(version string) string {
199199 return gb .judgeVersion (modVersion )
200200 }
201201 groupedVersions := gb .ListRemoteVersions (false ) // donot print
202+
203+ // latest will pick the latest version excluding rc and beta
204+ // dev-latest will first remove rc and beta from the list of versions and then pick the latest version
202205 if version == "latest" || version == "dev-latest" {
203206 groupedVersionKeys := make ([]string , 0 , len (groupedVersions ))
204207 for groupedVersionKey := range groupedVersions {
@@ -224,7 +227,16 @@ func (gb *GoBrew) judgeVersion(version string) string {
224227 if len (judgedVersions ) == 0 {
225228 return "None"
226229 }
227- return judgedVersions [len (judgedVersions )- 1 ]
230+ // Filter versions containing "rc" or "beta"
231+ filteredVersions := gb .filterVersions (judgedVersions , []string {"rc" , "beta" })
232+
233+ // Get the last element of the filtered slice
234+ var lastVersion string
235+ if len (filteredVersions ) > 0 {
236+ lastVersion = filteredVersions [len (filteredVersions )- 1 ]
237+ }
238+
239+ return lastVersion
228240 }
229241
230242 // loop in reverse
@@ -313,6 +325,20 @@ func (gb *GoBrew) getVersionDir(version string) string {
313325 return filepath .Join (gb .versionsDir , version )
314326}
315327
328+ // filterVersions returns a new slice containing only the elements that contain any of the substrings in contains
329+ func (gb * GoBrew ) filterVersions (versions []string , contains []string ) []string {
330+ var filtered []string
331+ for _ , version := range versions {
332+ for _ , contain := range contains {
333+ if strings .Contains (version , contain ) {
334+ filtered = append (filtered , version )
335+ break // Move to the next version after the first match
336+ }
337+ }
338+ }
339+ return filtered
340+ }
341+
316342func (gb * GoBrew ) downloadAndExtract (version string ) {
317343 tarName := "go" + version + "." + gb .getArch () + tarNameExt
318344
0 commit comments